<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

<script>

    // 这个fn里面有个局部变量cnt
    // fn里的fun能访问这个局部变量，那么fn就是一个闭包
    // 我们将fun返回出去，在外部调用fun就能直接修改fn内部的cnt
    // 这时候cnt就不会被回收了，每次调用fun，fn内的cnt就会加一，不会被回收
    // 即使直接调用fn，cnt也不会再被赋值为1
    // 我感觉这是因为fn相当于一个对象了，分配在堆中，不会被回收。
    // 这就产生了内存泄露风险
    function fn() {
        let cnt = 1
        function fun() {
            cnt++
            console.log("函数背调用了" + cnt + "次")
        }
        return fun
    }

    const res = fn()

</script>
    
</body>
</html>